package com.spsoft.vatoutinv.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.spsoft.system.entity.NvatTrandtadvaltaxsep;
import com.spsoft.vatoutinv.model.dto.matchflow.VmsQueryMatchFlowPageDto;
import com.spsoft.vatoutinv.model.dto.transflowfindinvoice.TransFlowRecallInvoiceQueryDTO;
import com.spsoft.vatoutinv.model.dto.vmstransactionflowinvoice.VmsTransactionFlowInvoicePageDto;
import com.spsoft.vatoutinv.model.vo.transflowfindinvoice.TransFlowRecallInvoiceRespVO;
import com.spsoft.vatoutinv.model.vo.vmsissuenegativeincoices.RedConfirmationFormVo;
import com.spsoft.vatoutinv.model.vo.vmstransactionflowinvoice.VmsFlowInvoiceDetailVo;
import com.spsoft.vatoutinv.model.vo.vmstransactionflowinvoice.VmsMergeQueryVo;
import com.spsoft.vatoutinv.model.vo.vmstransactionflowinvoice.VmsTransacitonFlowInvoiceItemVo;
import com.spsoft.vatoutinv.model.vo.vmstransactionflowinvoice.VmsTransactionFlowInvoicePageVo;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @author wangy
 * @description 针对表【NVAT_TRANDTADVALTAXSEP(交易数据信息表（共性字段表）
 * 注：对应数据模版字段包含共性字段（本表字段）+扩展信息字段，扩展信息字段对应表必须包含交易号、数据来源字段，采集数据时会将交易数据拆分成两部分数据。业务类型字段在数据采集时，按照业务梳理的给交易数据打上业务类型字段标识。
 * 如果应税判定字段不在扩展信息表在扩展表某个字段引用的其他表中，则以那张表的主键作为应税判定字段。
 * 数据采集时，如果没有交易客户编码的数据通过开户帐号与客户映射找到对应的客户编号来存储。
 * 该表的字段顺序请勿调整会影响批量开票存储过程。)】的数据库操作Mapper
 * @createDate 2024-01-04 13:05:39
 * @Entity com.spsoft.system.entity.NvatTrandtadvaltaxsep
 */
public interface VmsNvatTrandtadvaltaxsepMapper extends BaseMapper<NvatTrandtadvaltaxsep> {

    /**
     * 获取交易流水开票列表
     *
     * @param page                             分页对象
     * @param deptCode                         部门编码
     * @param vmsTransactionFlowInvoicePageDto 查询条件
     * @return IPage<VmsTransactionFlowInvoicePageVo> 交易流水开票列表
     */
    IPage<VmsTransactionFlowInvoicePageVo> getTransactionFlowInvoiceList(@Param("page") Page<VmsTransactionFlowInvoicePageVo> page, @Param("deptCode") String deptCode, @Param("dto") VmsTransactionFlowInvoicePageDto vmsTransactionFlowInvoicePageDto);

    /**
     * 根据 流水ID 获取发票信息
     *
     * @param ids 流水id
     * @return
     */
    List<VmsTransacitonFlowInvoiceItemVo> selectInvoiceByIds(List<Long> ids);

    IPage<TransFlowRecallInvoiceRespVO> queryTransflow(@Param("page") Page<TransFlowRecallInvoiceRespVO> page, @Param("queryDTO") TransFlowRecallInvoiceQueryDTO queryDTO, @Param("jyjgs") List<String> jyjgs);

    /**
     * 匹配流水-分页查询可匹配流水
     *
     * @param page    分页对象
     * @param pageDto 查询条件
     */
    IPage<VmsTransactionFlowInvoicePageVo> queryFlowByAutoOrHand(@Param("page") Page<VmsTransactionFlowInvoicePageVo> page, @Param("pageDto") VmsQueryMatchFlowPageDto pageDto);

    /**
     * 根据保单类型、保单号码查询交易流水
     *
     * @param bdlx     保单类型
     * @param bdhmList 保单号码
     */
    List<VmsTransactionFlowInvoicePageVo> queryMatchFlowByExcel(@Param("bdlx") String bdlx, @Param("bdhmList") List<String> bdhmList);

    /**
     * 查询合并数据
     *
     * @param page
     * @param ywbh
     * @param tbdh
     * @param deptCode
     * @return
     */

    IPage<VmsMergeQueryVo> mergePageQuery(@Param("page") Page<VmsMergeQueryVo> page, @Param("ywbh") String ywbh, @Param("tbdh") String tbdh, @Param("deptCode") String deptCode);

    /**
     * 查询要合并的数据
     * A.XZQC ,A.SJH,A.ZJLX ,A.ZJHM ,A.DZYX ,A.NSRSBH ,A.TBDH
     * 扩展表中的上面字段，借用了主表没有的字段YTBS1-YTBS7
     *
     * @param ywbh
     * @param tbdh
     * @param deptCode
     * @param rdids
     * @return
     */

    List<NvatTrandtadvaltaxsep> mergeQuery(@Param("ywbh") String ywbh, @Param("tbdh") String tbdh, @Param("deptCode") String deptCode, @Param("rdids") List<String> rdids);

    VmsFlowInvoiceDetailVo getMergeInfo(@Param("id") String id);

    VmsFlowInvoiceDetailVo getSplitInfo(@Param("id") String id);

    long verifySplit(@Param("id") Long id);

    long verifyMerge(@Param("id") Long id);

    IPage<VmsFlowInvoiceDetailVo> getSplitItem(@Param("page") IPage<VmsFlowInvoiceDetailVo> page, String rdid);


    IPage<VmsFlowInvoiceDetailVo> getMergeItem(@Param("page") IPage<VmsFlowInvoiceDetailVo> page, String rdid);

    List<VmsFlowInvoiceDetailVo> getSplitItemList(String rdid);


    List<VmsFlowInvoiceDetailVo> getMergeItemList(String rdid);
}




